package com.itheima.mp.domain.query;

import com.baomidou.mybatisplus.core.metadata.OrderItem;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.itheima.mp.domain.po.User;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

@Data
@ApiModel("分页查询")
public class PageQuery {
    @ApiModelProperty("当前页码")
    private Integer pageNo = 1;
    @ApiModelProperty("每页显示条数")
    private Integer pageSize = 5;
    @ApiModelProperty("排序")
    private String sortBy;
    @ApiModelProperty("是否为升序")
    private Boolean isAsc = true;


    public <T>  Page<T> toMpPage(OrderItem ... orders){
        // 1.分页条件
        Page<T> p = Page.of(pageNo, pageSize);
        // 2.排序条件
        // 2.1.先看前端有没有传排序字段
        if (sortBy != null) {
            p.addOrder(new OrderItem(sortBy, isAsc));
            return p;
        }
        // 2.2.再看有没有手动指定排序字段
        if(orders != null){
            p.addOrder(orders);
        }
        return p;
    }

    public <T> Page<T> toMpPage(String defaultSortBy, boolean isAsc){
        return this.toMpPage(new OrderItem(defaultSortBy, isAsc));
    }

    public <T> Page<T> toMpPageDefaultSortByCreateTimeDesc() {
        return toMpPage("create_time", false);
    }

    public <T> Page<T> toMpPageDefaultSortByUpdateTimeDesc() {
        return toMpPage("update_time", false);
    }

//    // 简化service层代码
//    // 直接封装好service一个Mp提供的Page对象
//    public <P> Page<P> toMpPage(OrderItem ... items){
//        Page<P> page = Page.of(pageNo, pageSize);
//        if (sortBy != null){
//            page.addOrder(new OrderItem(sortBy, isAsc));
//        }
//        if (items!=null){
//            page.addOrder(items);
//        }
//        return page;
//    }
//
//    public <P> Page<P> toMpPage(String sortBy, Boolean isAsc){
//        return toMpPage(new OrderItem(sortBy, isAsc));
//    }
//
//    public <P> Page<P> toMpPageDefaultSortByCreateTimeDesc(){
//        return toMpPage("create_time", false);
//    }
//    public <P> Page<P> toMpPageDefaultSortByUpdateTimeDesc(){
//        return toMpPage("update_time", false);
//    }




















}
